(function(factory) { 
     if (typeof define === 'function' && define.amd) { 
         define(['jquery', 'hammerjs'], factory); 
     } else if (typeof exports === 'object') { 
         factory(require('jquery'), require('hammerjs')); 
     } else { 
         factory(jQuery, Hammer); 
     } 
 }(function($, Hammer) { 
     function hammerify(el, options) { 
         var $el = $(el); 
         if(!$el.data("hammer")) { 
             $el.data("hammer", new Hammer($el[0], options)); 
         } 
     } 
 
     $.fn.hammer = function(options) { 
         return this.each(function() { 
             hammerify(this, options); 
         }); 
     }; 
 
 
     // extend the emit method to also trigger jQuery events 
     Hammer.Manager.prototype.emit = (function(originalEmit) { 
         return function(type, data) { 
             originalEmit.call(this, type, data); 
             $(this.element).trigger({ 
                 type: type, 
                 gesture: data 
             }); 
         }; 
     })(Hammer.Manager.prototype.emit); 
 })); 
